// opencv async detector demo
// Author: lihaoweicv@hotmail.com
// MIT License

#ifndef CV_ASYNC_DEMO_ABSTRACT_DETECTOR_H
#define CV_ASYNC_DEMO_ABSTRACT_DETECTOR_H

#include "base/status.h"
#include <opencv2/opencv.hpp>

namespace cvf
{
    /**
     * @brief 检测的基本信息
     */
    typedef  struct _DetInfo
    {
        _DetInfo()
        {
            imgHeight=imgWidth = 0;
            hasObject = false;
            conf = 0.0f;
        }
        float  conf;//检测的置信度
        bool  hasObject; //是否检测到目标
        int  imgWidth; // 坐标系图像宽度
        int  imgHeight; // 坐标系图像高度
        cv::Rect  detBox; // 检测到的bounding box
    } DetInfo;

    /**
     * @brief 检测器base类
     */
    class Abstract_Detector
    {
    public:
        Abstract_Detector(){}
        virtual  ~Abstract_Detector(){}
        /**
        * @brief 初始化模型
        * @param modelPaths
        * @return  see @Status
        */
        virtual  Status init_models(std::vector<std::string> &modelPaths) = 0;
        /*****************************************************/

        /**
         * @brief 检测
         * @param imgBGR [in] 检测图像帧
         * @param dets  [out]
         * @return see @Status
         */
        virtual  Status detect_on_frame(cv::Mat &imgBGR, DetInfo &dets) = 0;
        /*****************************************************/

    };
}//namespace cvf

#endif //CV_ASYNC_DEMO_ABSTRACT_DETECTOR_H
